/*
 * @Description: new过程
 * @Author: dh
 * @Date: 2022-04-11 10:54:44
 * @LastEditors: dh
 * @LastEditTime: 2025-09-11 14:25:58
 */
function Person(name, age) {
	this.name = name
	this.age = age
}

let p1 = new Person('deng', 20)

function copyNew(fn, ...args) {
	//1.创建了一个空对象
	const newObj = {}
	//2. 空对象的原型指向了构造函数的prototype
	newObj.__proto__ = fn.prototype
	//上面的两步可以合为一步,ie11以下无_proto__,用以下方式兼容
	// let newObj=Object.create(fn.prototype)
	//3. 将obj的this改为新创建对象
	let result = fn.call(newObj, ...args)
	// let result = fn.apply(newObj, args)
	//判断类里面有返回值吗？返回值是对象或者function吗?如果是的那那就返回类中的返回值，如果不是的话那就返回新创建的对象
	// let isObject = typeof result === 'object' && result !== null
	// let isFunction = typeof result === 'function'
	return result instanceof Object ? result : newObj
}
let p2 = copyNew(Person, 'deng', 20)
console.log(p2)
